#include "ThreadPool.hpp"
#include <iostream>
#include <string>
#include <memory>
#include "Log.hpp"
#include "Task.hpp"
using namespace std;
int main()
{
    srand(time(nullptr) ^ getpid() ^ pthread_self());
    // EnableFile();
    EnableScreen();
    //  线程池指针
    //  unique_ptr<ThreadPool<int>> tp = make_unique<ThreadPool<int>>();
    unique_ptr<ThreadPool<Task>> tp(new ThreadPool<Task>());
    // 初始化线程池
    tp->InitThreadPool();
    // 启动线程池
    tp->Start();
    sleep(2);
    // 任务入队列
    int tasknum = 10; // 任务数
    while (tasknum > 0)
    {
        sleep(1);
        int a = rand() % 10 + 1;
        usleep(1234);
        int b = rand() % 10 + 1;
        Task t(a, b);
        LOG(Info, "主线程插入任务:%s", t.DebugToString().c_str());
        tp->Enqueue(t);
        tasknum--;
    }
    // 线程池退出
    tp->Stop();
    // 等待线程池
    tp->waitAll();

    // Test(6, 11, 22, 33, 44, 55, 66);
    // LogMessage(__FILE__, __LINE__, DEBUG, "hello world");
    // LogMessage(__FILE__, __LINE__, DEBUG, "hello world-%d", 1);
    // LogMessage(__FILE__, __LINE__, DEBUG, "hello world-%d-%f", 1, 1.23);

    // LOG(DEBUG, "hello world");
    // LOG(DEBUG, "hello world-%d", 10);
    // LOG(DEBUG, "hello world-%d-%s", 10, "hahahaha");
    return 0;
}